Pandas.melt

数据分析的时候经常要把宽数据--->>长数据,有点像你们用excel 做透视跟逆透视的过程,直接看下面例子,希望有助于理解.

pandas.melt 使用参数:

pandas.melt(frame, 
            id_vars=None, 
            value_vars=None, 
            var_name=None, 
            value_name='value', 
            col_level=None)

参数解释:

  • frame:要处理的数据集。
  • id_vars:不需要被转换的列名。
  • value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
  • var_name和value_name是自定义设置对应的列名。
  • col_level :如果列是MultiIndex,则使用此级别。

(问题来了:如果某些列没有包含在id_vars和value_vars中会怎么样呢? 答:这些列的内容会被忽略)

Returns

  • DataFrame

Examples

df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}})
df
   A  B  C
0  a  1  2
1  b  3  4
2  c  5  6

转化 B 列

pd.melt(df, id_vars=['A'], value_vars=['B'])
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5

转化 B,C 列

pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
3  a        C      2
4  b        C      4
5  c        C      6

The names of ‘variable’ and ‘value’ columns can be customized:

pd.melt(df, id_vars=['A'], value_vars=['B'],
        var_name='myVarname', value_name='myValname')
   A myVarname  myValname
0  a         B          1
1  b         B          3
2  c         B          5

将数据转化,结合 seaborn 的 FacetGrid() 绘制组合图

categorical_features = ["bodyType", "fuelType", "gearbox", "notRepairedDamage"]
data = Train_data[categorical_features]
f = pd.melt(data, value_vars=categorical_features)

f

image-20200907171043204

将其转化为两列,根据不同的标签绘制柱状图(分类,数量统计)

def count_plot(x, **kwargs):
    sns.countplot(x=x)
    x = plt.xticks(rotation=90)

g = sns.FacetGrid(f, col="variable", col_wrap=2, size=6, sharex=False, sharey=False)
g = g.map(count_plot, "value")

下载

Update time: 2020-09-07

results matching ""

    No results matching ""